﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using OurFAS.Data;

using System.IO;
using NPOI.HSSF.UserModel;

namespace OurFAS.MyDataManage
{
    public partial class FrmDataOutput : Form
    {
        private string m_sDataSource = null;

        public FrmDataOutput()
        {
            InitializeComponent();
            cmbDataSource.SelectedIndex = 0;
        }

        private void btnDataBak_Click(object sender, EventArgs e)
        {
            if (cmbDataSource.SelectedIndex == -1)
            {
                MessageBox.Show("请首先选择一个数据源！");
                return;
            }

            SaveFileDialog dlg = new SaveFileDialog();
            dlg.Filter = "*.xls|*.xls";
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                if (!File.Exists(System.Windows.Forms.Application.StartupPath + @"\template\template.xls"))
                {
                    MessageBox.Show("模板文件不存在！");
                    return;
                }

                string sOutputDir = Path.GetDirectoryName(dlg.FileName);

                //打开文件
                FileStream fileTemplate = new FileStream(System.Windows.Forms.Application.StartupPath + @"\template\template.xls",
                    FileMode.Open, FileAccess.Read);
                HSSFWorkbook hssfworkbook = new HSSFWorkbook(fileTemplate);

                //获取工作簿
                HSSFSheet sheetAsset = hssfworkbook.GetSheet("资产信息表") as HSSFSheet;

                if (m_sDataSource == "base")
                {
                    int iRow = 1;
                    foreach (Tbl_BaseAssets record in AssetsHelper.GetBaseAssets())
                    {
                        sheetAsset.CreateRow(iRow);
                        sheetAsset.GetRow(iRow).CreateCell(0);
                        sheetAsset.GetRow(iRow).CreateCell(1);
                        sheetAsset.GetRow(iRow).CreateCell(2);
                        sheetAsset.GetRow(iRow).CreateCell(3);
                        sheetAsset.GetRow(iRow).CreateCell(4);
                        sheetAsset.GetRow(iRow).CreateCell(5);
                        sheetAsset.GetRow(iRow).CreateCell(6);
                        sheetAsset.GetRow(iRow).CreateCell(7);
                        sheetAsset.GetRow(iRow).CreateCell(8);
                        sheetAsset.GetRow(iRow).CreateCell(9);
                        sheetAsset.GetRow(iRow).CreateCell(10);
                        sheetAsset.GetRow(iRow).CreateCell(11);
                        sheetAsset.GetRow(iRow).CreateCell(12);
                        sheetAsset.GetRow(iRow).CreateCell(13);
                        sheetAsset.GetRow(iRow).CreateCell(14);
                        sheetAsset.GetRow(iRow).CreateCell(15);
                        sheetAsset.GetRow(iRow).CreateCell(16);
                        sheetAsset.GetRow(iRow).CreateCell(17);
                        sheetAsset.GetRow(iRow).CreateCell(18);
                        sheetAsset.GetRow(iRow).CreateCell(19);
                        sheetAsset.GetRow(iRow).CreateCell(20);

                        sheetAsset.GetRow(iRow).GetCell(0).SetCellValue(record.AssetCode.Trim());
                        sheetAsset.GetRow(iRow).GetCell(1).SetCellValue(record.AssetTagCode.Trim());
                        sheetAsset.GetRow(iRow).GetCell(2).SetCellValue(record.AssetName.Trim());
                        sheetAsset.GetRow(iRow).GetCell(3).SetCellValue(record.AssetSpec.Trim());
                        sheetAsset.GetRow(iRow).GetCell(4).SetCellValue(record.TypeCodeL.Trim());
                        sheetAsset.GetRow(iRow).GetCell(5).SetCellValue(record.TypeCodeM.Trim());
                        sheetAsset.GetRow(iRow).GetCell(6).SetCellValue(record.UseFor.Trim());
                        sheetAsset.GetRow(iRow).GetCell(7).SetCellValue(record.InBillCode.Trim());
                        sheetAsset.GetRow(iRow).GetCell(8).SetCellValue(record.ProductionFirm.Trim());
                        sheetAsset.GetRow(iRow).GetCell(9).SetCellValue(record.OriCost.ToString());
                        sheetAsset.GetRow(iRow).GetCell(10).SetCellValue(record.StartUseDate.Trim());
                        sheetAsset.GetRow(iRow).GetCell(11).SetCellValue(record.InCharge.Trim());
                        sheetAsset.GetRow(iRow).GetCell(12).SetCellValue(record.Dept.Trim());
                        sheetAsset.GetRow(iRow).GetCell(13).SetCellValue(record.TaskCode.Trim());
                        sheetAsset.GetRow(iRow).GetCell(14).SetCellValue(record.GetType.Trim());
                        sheetAsset.GetRow(iRow).GetCell(15).SetCellValue(record.PurchaseFrom.Trim());
                        sheetAsset.GetRow(iRow).GetCell(16).SetCellValue(record.GBCode.Trim());
                        sheetAsset.GetRow(iRow).GetCell(17).SetCellValue(record.MeasureInfo.Trim());
                        sheetAsset.GetRow(iRow).GetCell(18).SetCellValue(record.Location.Trim());
                        sheetAsset.GetRow(iRow).GetCell(19).SetCellValue(record.CertificateNo.Trim());
                        sheetAsset.GetRow(iRow).GetCell(20).SetCellValue(record.RepairDate.Trim());
                        iRow++;
                    }
                    sheetAsset.ForceFormulaRecalculation = true;
                }
                else if (m_sDataSource == "self")
                {
                    int iRow = 1;
                    foreach (Tbl_SelfAssets record in AssetsHelper.GetSelfAssets())
                    {
                        sheetAsset.CreateRow(iRow);
                        sheetAsset.GetRow(iRow).CreateCell(0);
                        sheetAsset.GetRow(iRow).CreateCell(1);
                        sheetAsset.GetRow(iRow).CreateCell(2);
                        sheetAsset.GetRow(iRow).CreateCell(3);
                        sheetAsset.GetRow(iRow).CreateCell(4);
                        sheetAsset.GetRow(iRow).CreateCell(5);
                        sheetAsset.GetRow(iRow).CreateCell(6);
                        sheetAsset.GetRow(iRow).CreateCell(7);
                        sheetAsset.GetRow(iRow).CreateCell(8);
                        sheetAsset.GetRow(iRow).CreateCell(9);
                        sheetAsset.GetRow(iRow).CreateCell(10);
                        sheetAsset.GetRow(iRow).CreateCell(11);
                        sheetAsset.GetRow(iRow).CreateCell(12);
                        sheetAsset.GetRow(iRow).CreateCell(13);
                        sheetAsset.GetRow(iRow).CreateCell(14);
                        sheetAsset.GetRow(iRow).CreateCell(15);
                        sheetAsset.GetRow(iRow).CreateCell(16);
                        sheetAsset.GetRow(iRow).CreateCell(17);
                        sheetAsset.GetRow(iRow).CreateCell(18);
                        sheetAsset.GetRow(iRow).CreateCell(19);
                        sheetAsset.GetRow(iRow).CreateCell(20);

                        sheetAsset.GetRow(iRow).GetCell(0).SetCellValue(record.AssetCode.Trim());
                        sheetAsset.GetRow(iRow).GetCell(1).SetCellValue(record.AssetTagCode.Trim());
                        sheetAsset.GetRow(iRow).GetCell(2).SetCellValue(record.AssetName.Trim());
                        sheetAsset.GetRow(iRow).GetCell(3).SetCellValue(record.AssetSpec.Trim());
                        sheetAsset.GetRow(iRow).GetCell(4).SetCellValue(record.TypeCodeL.Trim());
                        sheetAsset.GetRow(iRow).GetCell(5).SetCellValue(record.TypeCodeM.Trim());
                        sheetAsset.GetRow(iRow).GetCell(6).SetCellValue(record.UseFor.Trim());
                        sheetAsset.GetRow(iRow).GetCell(7).SetCellValue(record.InBillCode.Trim());
                        sheetAsset.GetRow(iRow).GetCell(8).SetCellValue(record.ProductionFirm.Trim());
                        sheetAsset.GetRow(iRow).GetCell(9).SetCellValue(record.OriCost.ToString());
                        sheetAsset.GetRow(iRow).GetCell(10).SetCellValue(record.StartUseDate.Trim());
                        sheetAsset.GetRow(iRow).GetCell(11).SetCellValue(record.InCharge.Trim());
                        sheetAsset.GetRow(iRow).GetCell(12).SetCellValue(record.Dept.Trim());
                        sheetAsset.GetRow(iRow).GetCell(13).SetCellValue(record.TaskCode.Trim());
                        sheetAsset.GetRow(iRow).GetCell(14).SetCellValue(record.GetType.Trim());
                        sheetAsset.GetRow(iRow).GetCell(15).SetCellValue(record.PurchaseFrom.Trim());
                        sheetAsset.GetRow(iRow).GetCell(16).SetCellValue(record.GBCode.Trim());
                        sheetAsset.GetRow(iRow).GetCell(17).SetCellValue(record.MeasureInfo.Trim());
                        sheetAsset.GetRow(iRow).GetCell(18).SetCellValue(record.Location.Trim());
                        sheetAsset.GetRow(iRow).GetCell(19).SetCellValue(record.CertificateNo.Trim());
                        sheetAsset.GetRow(iRow).GetCell(20).SetCellValue(record.RepairDate.Trim());
                        iRow++;
                    }
                    sheetAsset.ForceFormulaRecalculation = true;
                }
                else if (m_sDataSource == "measure")
                {
                    int iRow = 1;
                    foreach (Tbl_MeasureAssets record in AssetsHelper.GetMeasureAssets())
                    {
                        sheetAsset.CreateRow(iRow);
                        sheetAsset.GetRow(iRow).CreateCell(0);
                        sheetAsset.GetRow(iRow).CreateCell(1);
                        sheetAsset.GetRow(iRow).CreateCell(2);
                        sheetAsset.GetRow(iRow).CreateCell(3);
                        sheetAsset.GetRow(iRow).CreateCell(4);
                        sheetAsset.GetRow(iRow).CreateCell(5);
                        sheetAsset.GetRow(iRow).CreateCell(6);
                        sheetAsset.GetRow(iRow).CreateCell(7);
                        sheetAsset.GetRow(iRow).CreateCell(8);
                        sheetAsset.GetRow(iRow).CreateCell(9);
                        sheetAsset.GetRow(iRow).CreateCell(10);
                        sheetAsset.GetRow(iRow).CreateCell(11);
                        sheetAsset.GetRow(iRow).CreateCell(12);
                        sheetAsset.GetRow(iRow).CreateCell(13);
                        sheetAsset.GetRow(iRow).CreateCell(14);
                        sheetAsset.GetRow(iRow).CreateCell(15);
                        sheetAsset.GetRow(iRow).CreateCell(16);
                        sheetAsset.GetRow(iRow).CreateCell(17);
                        sheetAsset.GetRow(iRow).CreateCell(18);
                        sheetAsset.GetRow(iRow).CreateCell(19);
                        sheetAsset.GetRow(iRow).CreateCell(20);

                        sheetAsset.GetRow(iRow).GetCell(0).SetCellValue(record.AssetCode.Trim());
                        sheetAsset.GetRow(iRow).GetCell(1).SetCellValue(record.AssetTagCode.Trim());
                        sheetAsset.GetRow(iRow).GetCell(2).SetCellValue(record.AssetName.Trim());
                        sheetAsset.GetRow(iRow).GetCell(3).SetCellValue(record.AssetSpec.Trim());
                        sheetAsset.GetRow(iRow).GetCell(4).SetCellValue(record.TypeCodeL.Trim());
                        sheetAsset.GetRow(iRow).GetCell(5).SetCellValue(record.TypeCodeM.Trim());
                        sheetAsset.GetRow(iRow).GetCell(6).SetCellValue(record.UseFor.Trim());
                        sheetAsset.GetRow(iRow).GetCell(7).SetCellValue(record.InBillCode.Trim());
                        sheetAsset.GetRow(iRow).GetCell(8).SetCellValue(record.ProductionFirm.Trim());
                        sheetAsset.GetRow(iRow).GetCell(9).SetCellValue(record.OriCost.ToString());
                        sheetAsset.GetRow(iRow).GetCell(10).SetCellValue(record.StartUseDate.Trim());
                        sheetAsset.GetRow(iRow).GetCell(11).SetCellValue(record.InCharge.Trim());
                        sheetAsset.GetRow(iRow).GetCell(12).SetCellValue(record.Dept.Trim());
                        sheetAsset.GetRow(iRow).GetCell(13).SetCellValue(record.TaskCode.Trim());
                        sheetAsset.GetRow(iRow).GetCell(14).SetCellValue(record.GetType.Trim());
                        sheetAsset.GetRow(iRow).GetCell(15).SetCellValue(record.PurchaseFrom.Trim());
                        sheetAsset.GetRow(iRow).GetCell(16).SetCellValue(record.GBCode.Trim());
                        sheetAsset.GetRow(iRow).GetCell(17).SetCellValue(record.MeasureInfo.Trim());
                        sheetAsset.GetRow(iRow).GetCell(18).SetCellValue(record.Location.Trim());
                        sheetAsset.GetRow(iRow).GetCell(19).SetCellValue(record.CertificateNo.Trim());
                        sheetAsset.GetRow(iRow).GetCell(20).SetCellValue(record.RepairDate.Trim());
                        iRow++;
                    }
                    sheetAsset.ForceFormulaRecalculation = true;
                }
                try
                {
                    FileStream fileOutput = new FileStream(dlg.FileName, FileMode.Create);
                    hssfworkbook.Write(fileOutput);
                    fileOutput.Close();

                    System.Diagnostics.Process.Start(sOutputDir);
                }
                catch
                {
                    MessageBox.Show("请先关闭已打开的Excel文件。");
                    return;
                }
                finally
                {
                    Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory.ToString();
                }
            }
        }

        private void cmbDataSource_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmbDataSource.SelectedIndex == 0)
            {
                m_sDataSource = "base";
            }
            else if (cmbDataSource.SelectedIndex == 1)
            {
                m_sDataSource = "self";
            }
            else if (cmbDataSource.SelectedIndex == 2)
            {
                m_sDataSource = "measure";
            }
        }
    
    }
}
